Looker Blocksを使ってAWS CloudTrailのデータを5分で可視化してみた
奈良県でリモートワーク中の玉井です。
AWSユーザーならほとんどの方がチェックしているAWS CloudTrailの内容を可視化します。Looker Blocksがあるので、それを使います。
検証環境など
使用データ
CloudTrailの証跡ログが保存されているS3を参照します。S3のデータを分析するということは…そう、Lookerに設定するデータソースとしてはAmazon Athenaとなります。
使用するBlocks
事前準備
Athenaの準備
対象AWSアカウント上で下記をやっておきます。
AthenaをLookerに設定する
その他操作環境
- Looker 7.10.19
やってみた
Projectを新規作成する
Starting PointでClone Public Git Repositoryを選びます。インポート元にリポジトリに、今回使うBlocksのリポジトリを使います。
Project作成に成功すると下記のようにLookMLファイルが展開されます。
LookMLをちょっとだけ修正する
自環境に合わせて修正します。
aws_athena_cloudtrail.model
Connection部分がサンプル表記になっているので、自環境のConnection名に変更します。
connection: "aws_optimizer"
cloudtrail_logs.view
sql_table_name
がサンプル表記になっているので、実際に分析したいAthenaのテーブル名に修正します。
view: cloudtrail_logs { sql_table_name: aws_optimizer.cloudtrail_logs ;; ...
cloudtrail_block.view
派生テーブル内のクエリのFROM句がサンプル表記になっているので、実際に分析したいAthenaのテーブル名に修正します(2箇所)。
view: user_login_facts { derived_table: { sql: select useridentity.username, count(*) as number_of_console_logins, sum(CASE WHEN errorcode = 'AccessDenied' THEN 1 ELSE 0 END) as failed_logins, sum(CASE WHEN errorcode = 'AccessDenied' THEN 0 ELSE 1 END) as successful_logins, min(eventtime) as first_login, max(eventtime) as latest_login from aws_optimizer.cloudtrail_logs where eventname = 'ConsoleLogin' GROUP BY 1 ;; } ...
view: user_ip_facts { derived_table: { sql: SELECT useridentity.username, count(distinct sourceipaddress) as ip_addresses from aws_optimizer.cloudtrail_logs group by 1 order by 2 desc limit 50 ;; } ...
LookMLを本番ブランチにデプロイしてダッシュボードを確認する
一通り修正後、ダッシュボードができているかどうか確認します。
できてますね。
ダッシュボードを見てみる
このBlocksでは5つのダッシュボードが最初から備わっています。簡単にご紹介します。
General Operations
基本となるダッシュボードです。AWS内のイベントや、EC2のインスタンスタイプを変えたタイミング等が可視化されています。
このダッシュボードでAWS全体の仕様傾向を把握して、そこからポイント毎にドリルダウンしていって、改善やコスト削減につなげていきます。
Error Overview
AWSの運用中に発生したエラーについて、色々な切り口でまとまっています。頻繁なエラーや重大なエラー等を把握して、改善につなげましょう。
Console Login Overview
マネジメントコンソールへのアクセスに関するダッシュボードです。
不審なIPアドレスからのログイン、過度に負荷のかかるユーザーの発見、ログイン問題のトラブルシューティングなどに利用できます。
EC2 Security Group Modifications
EC2インスタンスの運用上の問題やセキュリティインシデントをレビューする場合、関連するセキュリティグループの変更を確認すると思いますが、それに使えるダッシュボードです。
このダッシュボードは、ネットワークインターフェースID、セキュリティグループ、およびアラーム発生のX時間前から始まる時間範囲をフィルタリングすることができ、最近の変更を把握することができます。怪しいセキュリティグループを指定したり、問題が起こっているEC2インスタンスのネットワークインターフェースDを指定したりできます。
また、EC2インスタンスのCPU使用率に対してCloudWatchアラームを設定している場合(一定以上高くなったら通知)、(もしアラームが通知されたら)まず最初に、インスタンスにさらなるトラフィックや負荷を生み出す可能性のあるセキュリティグループの変更(新しいセキュリティグループの追加や既存のセキュリティグループへのインバウンドルールの追加)があったかどうかを、このダッシュボードで確認できます。
Operational Account Activity
各ユーザーが何してるのかを把握するダッシュボードになっています。ダッシュボードというか、3つの表が並んでいます。
Top AWS Event Errors
一定時間内に繰り返し発生しているエラーがわかります。よくあるのが、S3のバケットポリシーが正しく設定されていなくて、S3関連のエラーが連発しているとかです。そういうのを発見して、AWSサービスを改善していきます。
Top IAM Users
イベント別のIAMユーザーとアクティビティを示しています。
各IAMユーザーによって開始されたアクティビティの合計と、それらのアクティビティのイベント名が表示されていますが、この表からドリルダウンしてアクティビティをフィルタリングし、既知のネットワーク外や時間外に発生したイベントのみを表示して、問題を分析します。
Root Activity
ルートアカウントによって開始されたイベントがわかります。これらがルートアカウント自体のアクティビティなのか、それともアクティビティを実行するためにAWSサービスによって呼び出されたのか(呼び出された場合はどのサービスか)を把握するために使います。
おわりに
Cloudtrailの監視はみなさんやっていると思うので、ぜひLookerを使って簡単に可視化してみてください。
参考
Athenaの動作確認でハマったときに役立った記事をご紹介しておきます。